#include <iostream>
using namespace std;
#include <queue>
#include <string>

//队列 Queue
/*
构造函数：
    queue<T> que;       //queue采用模版类实现，queue对象的默认构造形式
    queue(const queue &que);    //拷贝构造函数

赋值操作：
    queue& operator=(const queue &que);     //重载等号操作符

数据存取：
    push(elem);     //往队尾添加元素
    pop();          //从队头移除第一个元素
    back();         //返回最后一个元素
    front();        //返回第一个元素

大小操作：
    empty();        //判断堆栈是否为空
    size();         //返回栈的大小
*/
class Person
{
public:
    string name;
    int age;

    Person(string name, int age)
    {
        this->name = name;
        this->age = age;
    }
};

void test1()
{
    //创建队列
    queue<Person> q;

    //准备数据
    Person p1("唐僧", 30);
    Person p2("孙悟空", 999);
    Person p3("猪八戒", 1000);
    Person p4("沙僧", 300);

    //入队
    q.push(p1);
    q.push(p2);
    q.push(p3);
    q.push(p4);

    cout << "队列大小为：" << q.size() << endl;
    
    //判断只要队列不为空，查看队头，查看队尾，出队
    while (!q.empty())
    {
        //查看队头
        cout << "队头元素 -- 姓名：" << q.front().name
            << "  年龄：" << q.front().age << endl;

        //查看队尾
        cout << "队尾元素 -- 姓名：" << q.back().name
            << "  年龄：" << q.back().age << endl;

        //出队
        q.pop();
    }
    cout << "队列大小为：" << q.size() << endl;
}

int main()
{
    test1();
    return 0;
}